package org.lintcode_Close.Stage1_Easy_50.O1basicDataTypes;

/**
 * @Auther: qingle
 * @Date: 2024/8/16-23:32
 * @Description:描述
描述
你正在和朋友玩一个需要交替进行的游戏，在游戏开始时，由你先手。

桌子上共有 n 堆石头，在每个玩家的回合中，玩家需要选择任一非空石头堆，并从中拿取 任意非零 数量的石头。如果不能拿取任意数量的石头，则输掉游戏，同时另一玩家获胜。

现给你一个整数数组 rocks，其中的每一个元素 rocks[i] 表示 第 i 堆石头的数量。

你和你的朋友都会采取 最优策略，如果你能获胜，则返回 true，反之返回 false。
 *
 * 如果石头堆有一块石头，你别无选择，只能拿走，消耗一个石头堆
 * 如果石头堆有2块石头，有两个石头堆，你只能拿走1块石头，否则你输
 * 这样的话就相当于把两块石头堆分成三份
 *
 * 只要把所有石头堆分成奇数份，你就赢了
 *
 * 如果石头堆都是一块石头，n个石头堆，n为偶数，你输，n为奇数，你赢
 * 如果石头堆有n个石头堆，n为偶数，有奇数个石头堆超过两块的，你赢
 * n为奇数，有偶数个石头堆超过两块的，你赢
 *
 * 统计超过两块的数量加上1的数量
 */
public class S4巴什博弈_中等难度 {

	public static boolean canWinBash(int[] rocks) {
		// Write your code here
		// 统计超过1块的个数
		int count = 0;
		int countOne = 0;
		boolean flag = false;
		for (int i = 0; i < rocks.length; i++) {
			if (rocks[i] != 1) {
				break;
			} else {
				countOne ++;
			}
		}
		if (countOne == rocks.length && rocks.length % 2 == 0) {
			return false;
		}
		if (countOne == rocks.length && rocks.length % 2 == 1) {
			return true;
		}


		for (int i = 0; i < rocks.length; i++) {
			if (rocks[i] > 1) {
				count++;
			}
		}

		if(rocks.length %  2 == 0 && (count*2+countOne) % 2 == 1) {
			return true;
		}

		return rocks.length % 2 == 1 && (count * 2 + countOne) % 2 == 0;
	}

	public static void main(String[] args) {
//		int[] rocks = {1,1};
		int[] rocks = {1};
//		int[] rocks = {1,2,3};
		boolean b = canWinBash(rocks);
		System.out.println("" + b);
	}
}
